Control parallelism finds support in multithreaded environments and multiprocessing environments. Control parallelism in a programming model relates to support for executing two or more instruction sequences in parallel. A multithreaded environment, for example, supports control parallelism by supporting execution of two or more threads in parallel, or by at least allowing a developer to structure software in a way that facilitates parallel execution of thread instruction sequences if multiple processor cores are available.
Data parallelism in a programming model relates to support for processing two or more portions of a data set in parallel. Data parallelism therefore involves some form of control parallelism in the instructions that process the data. However, control parallelism does not necessarily involve any data parallelism; each thread might operate only on its own internal variables, for example, instead of operating on some portion of an underlying shared data set. Some forms of data parallelism occur at a low level within computer hardware, as when a graphics processor operates on four pixels at a time, for example. Other forms of data parallelism have been pursued at higher levels, such as dividing an array of elements into subsets which are processed in parallel.